Ciencia de Datos para Economistas

Clase 25- Joins

Autor/a
Afiliación

MSc. José M. Avendaño

Universidad Central de Venezuela- Escuela de Economía. 2024-2025

Fecha de publicación

10 de febrero de 2025

Objetivo

Conocer distintos métodos para juntar data frames por elementos coincidentes en al menos un atributo.

Ciclo

Introducción a los Joins

Los joins son operaciones fundamentales en el manejo de datos que permiten combinar dos o más data frames basados en una o más columnas comunes. En R, puedes utilizar la función dplyr::join() para realizar diferentes tipos de joins.

Tipos de Joins

  1. Inner Join: Devuelve solo las filas que tienen coincidencias en ambos data frames.
  2. Left Join: Devuelve todas las filas del primer data frame y las filas coincidentes del segundo data frame. Si no hay coincidencia, se rellenan con NA.

Tipos de Joins- cont.

  1. Right Join: Devuelve todas las filas del segundo data frame y las filas coincidentes del primer data frame. Si no hay coincidencia, se rellenan con NA.
  2. Full Join: Devuelve todas las filas de ambos data frames. Si no hay coincidencia, se rellenan con NA.

Explicación Visual

Ejemplos Prácticos -Crear DF 1

# Cargar la librería dplyr 
library(dplyr)

# Data frame de países con su población

df_paises <- data.frame ( pais = c("España", "Francia", 
                                   "Alemania", "Italia"), 
                          poblacion = c(47.3, 65.2, 83.1, 60.4) )

df_paises
      pais poblacion
1   España      47.3
2  Francia      65.2
3 Alemania      83.1
4   Italia      60.4
# Mostrar los data frames

Crear DF 2

# Data frame de países con su PIB per cápita

df_economia <- data.frame( pais = c("España", "Alemania",
                                    "Italia", "Portugal"),
                           pib_per_capita = c(29500, 37800, 31600, 24000) )

df_economia
      pais pib_per_capita
1   España          29500
2 Alemania          37800
3   Italia          31600
4 Portugal          24000

Inner Join

# Realizar un inner join
inner_join(df_paises, 
           df_economia,
           by = "pais")
      pais poblacion pib_per_capita
1   España      47.3          29500
2 Alemania      83.1          37800
3   Italia      60.4          31600

Explicación : Este join devuelve solo las filas que tienen coincidencias en ambos data frames. En este caso, los países “España”, “Alemania” e “Italia”.

Left Join

# Realizar un left join
left_join(df_paises, 
          df_economia,
          by = "pais")
      pais poblacion pib_per_capita
1   España      47.3          29500
2  Francia      65.2             NA
3 Alemania      83.1          37800
4   Italia      60.4          31600

Explicación: Este join devuelve todas las filas del primer data frame (df_paises) y las filas coincidentes del segundo data frame (df_economia). Si no hay coincidencia, se rellenan con NA. En este caso, el país “Francia” no tiene una correspondencia en el segundo data frame.

Right Join

# Realizar un right join
right_join(df_paises, 
           df_economia, 
           by = "pais")
      pais poblacion pib_per_capita
1   España      47.3          29500
2 Alemania      83.1          37800
3   Italia      60.4          31600
4 Portugal        NA          24000

Explicación : Este join devuelve todas las filas del segundo data frame (df_economia) y las filas coincidentes del primer data frame (df_paises). Si no hay coincidencia, se rellenan con NA. En este caso, el país “Portugal” no tiene una correspondencia en el primer data frame.

Full Join

full_join(df_paises, 
          df_economia, 
          by = c('pais'))
      pais poblacion pib_per_capita
1   España      47.3          29500
2  Francia      65.2             NA
3 Alemania      83.1          37800
4   Italia      60.4          31600
5 Portugal        NA          24000

Explicación : Este join devuelve todas las filas de ambos data frames. Si no hay coincidencia, se rellenan con NA. En este caso, los países “Francia” y “Portugal” no tienen una correspondencia en el otro data frame.

Nombre Clave No coincidente

Cambiar df_economia

df_economia2 <- data.frame( Pais = c("España", "Alemania",
                                    "Italia", "Portugal"),
                           pib_per_capita = c(29500, 37800, 31600, 24000) )

Aplicar by

left_join(df_paises,
          df_economia2,
          by = c('pais'= 'Pais'))
      pais poblacion pib_per_capita
1   España      47.3          29500
2  Francia      65.2             NA
3 Alemania      83.1          37800
4   Italia      60.4          31600